package com.delio.client.produccion.detallenotaingresos;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import com.delio.client.idioma.DelioConstants;
import com.delio.client.pagos.empleados.Empleados;
import com.delio.client.produccion.articulos.Articulos;
import com.delio.client.produccion.codigocolores.CodigoColores;
import com.delio.client.produccion.detallepedidos.DetallePedidos;
import com.delio.client.produccion.estadonotaingresos.EstadoNotaIngresos;
import com.delio.client.produccion.maquinarias.Maquinarias;
import com.delio.client.produccion.motivos.Motivos;
import com.delio.client.produccion.notaingresos.NotaIngreso;
import com.delio.client.produccion.notaingresos.NotaIngresos;
import com.delio.client.produccion.pedidos.SearchPedidoFPForm;
import com.delio.client.produccion.tipodocumentos.TipoDocumentos;
import com.delio.client.util.ComboboxFieldBinding;
import com.extjs.gxt.ui.client.Style.HorizontalAlignment;
import com.extjs.gxt.ui.client.Style.LayoutRegion;
import com.extjs.gxt.ui.client.Style.SelectionMode;
import com.extjs.gxt.ui.client.binding.FieldBinding;
import com.extjs.gxt.ui.client.binding.FormBinding;
import com.extjs.gxt.ui.client.data.BeanModel;
import com.extjs.gxt.ui.client.data.ModelData;
import com.extjs.gxt.ui.client.event.ButtonEvent;
import com.extjs.gxt.ui.client.event.Events;
import com.extjs.gxt.ui.client.event.GridEvent;
import com.extjs.gxt.ui.client.event.Listener;
import com.extjs.gxt.ui.client.event.MessageBoxEvent;
import com.extjs.gxt.ui.client.event.SelectionChangedEvent;
import com.extjs.gxt.ui.client.event.SelectionChangedListener;
import com.extjs.gxt.ui.client.event.SelectionListener;
import com.extjs.gxt.ui.client.util.IconHelper;
import com.extjs.gxt.ui.client.util.Margins;
import com.extjs.gxt.ui.client.widget.ContentPanel;
import com.extjs.gxt.ui.client.widget.Dialog;
import com.extjs.gxt.ui.client.widget.MessageBox;
import com.extjs.gxt.ui.client.widget.button.Button;
import com.extjs.gxt.ui.client.widget.button.ButtonBar;
import com.extjs.gxt.ui.client.widget.form.ComboBox;
import com.extjs.gxt.ui.client.widget.form.DateField;
import com.extjs.gxt.ui.client.widget.form.FormPanel;
import com.extjs.gxt.ui.client.widget.form.HiddenField;
import com.extjs.gxt.ui.client.widget.form.NumberField;
import com.extjs.gxt.ui.client.widget.form.TextField;
import com.extjs.gxt.ui.client.widget.form.ComboBox.TriggerAction;
import com.extjs.gxt.ui.client.widget.grid.CheckBoxSelectionModel;
import com.extjs.gxt.ui.client.widget.grid.ColumnConfig;
import com.extjs.gxt.ui.client.widget.grid.ColumnModel;
import com.extjs.gxt.ui.client.widget.grid.Grid;
import com.extjs.gxt.ui.client.widget.grid.filters.GridFilters;
import com.extjs.gxt.ui.client.widget.grid.filters.StringFilter;
import com.extjs.gxt.ui.client.widget.layout.BorderLayout;
import com.extjs.gxt.ui.client.widget.layout.BorderLayoutData;
import com.extjs.gxt.ui.client.widget.layout.FitLayout;
import com.extjs.gxt.ui.client.widget.layout.FormData;
import com.extjs.gxt.ui.client.widget.toolbar.PagingToolBar;
import com.extjs.gxt.ui.client.widget.toolbar.ToolBar;
import com.google.gwt.core.client.GWT;
import com.google.gwt.i18n.client.DateTimeFormat;

public class FichaProduccionForm extends ContentPanel{
	private DelioConstants x = GWT.create(DelioConstants.class);
	public Button btnDeleteDetalleNotaIngreso,btnGuardar,btnDeleteNotaIngreso;
	ToolBar toolBar1;
	ContentPanel ctp,cpg,cpf,cpe;
	BorderLayoutData inf,east,center,cen,cg;
	public TextField<String> numDocumento,detpedido,loteproveedorf;
	public Integer iddetpedido,idartdetallepedido;
	ComboBox<ModelData> enotaingreso,tipdocumento,ednotaingresof,articulof,maquinariaf,codigocolorf;
	ComboBox<BeanModel> empleadof;
	HiddenField<String> id,idf;
	Integer idmotivo,idestadonotaingreso,idtipdocumento,idartf,idmaquinaria,idcodigocolor,idempleado;
	String codartf;
	private FormBinding formbinding1;
	DateField fechaf;
	FormPanel f;
	ModelData selectedModel1;
	NumberField cantidadf,numerorollof,agujasrotasf,metroshilof;
	Grid<ModelData> grid1;
	
	public FichaProduccionForm(){
		setHeaderVisible(false);
		BorderLayout layout = new BorderLayout();
		setLayout(layout);
		Motivos.getStore();
		Articulos.getStore();
		EstadoNotaIngresos.listarestadonotaingresos();
		TipoDocumentos.getStore();
		NotaIngresos.getPaginate();
		DetalleNotaIngresos.getPaginate();
		CodigoColores.listarCodigoColores();
		Maquinarias.listarmaquinarias();
		Empleados.getPaginate();
       	Form();
     	SearchPedidoFPForm.fpf_concatPDP = FichaProduccionForm.this;
    
        inf = new BorderLayoutData(LayoutRegion.SOUTH);
        inf.setMargins(new Margins(0,3,0,0));

	    	   	    
	    cpe = new ContentPanel();
	    cpe.setHeaderVisible(false);
	    cpe.setLayout(new BorderLayout());
	       
	    cpf = new ContentPanel();
	    cpf.setHeading("Editar Ficha de Produccion");
	    cpf.setIconStyle("images/icons/people.png"); 
	    cpf.add(f,inf);
	    cpf.setLayout(new FitLayout());
	   
        east = new BorderLayoutData(LayoutRegion.EAST,350);
	    east.setMargins(new Margins(0));
	    east.setSplit(true);
	    east.setCollapsible(true);
	    
	    center  = new BorderLayoutData(LayoutRegion.CENTER);
	    center.setMargins(new Margins(0));
	    center.setCollapsible(true);
	    
	    ctp = new ContentPanel();
	    ctp.setHeaderVisible(false);
	    ctp.setLayout(new BorderLayout());

		 		    
		cen   = new BorderLayoutData(LayoutRegion.CENTER);
		cen.setMargins(new Margins(3));
		    
		cpg = new ContentPanel();
		cpg.setHeading("Listado de Fichas de Produccion");
		cpg.setIconStyle("images/icons/table.png");
		cpg.setLayout(new BorderLayout());
			
	 	cg = new BorderLayoutData(LayoutRegion.CENTER,100);

	    final PagingToolBar toolBarPag1 = new PagingToolBar(10);
        toolBarPag1.bind(DetalleNotaIngresos.loader);
        
        List<ColumnConfig> conf1 = new ArrayList<ColumnConfig>();
        CheckBoxSelectionModel<ModelData> sm1 = new CheckBoxSelectionModel<ModelData>();
        /* id notaingreso_id maquinaria_id maqcodigo maqdescripcion
        codigocolorcodigo
        codcoldescripcion
        empleado_id
        empleado
        cargo_id
        cargo
        numerorollo
        fecha
        articulo_id
        artdescripcion
        loteproveedor
        agujasrotas
        metroshilo
        cantidad*/
        conf1.add(sm1.getColumn()); 
        ColumnConfig col1  = new ColumnConfig("maqdescripcion","Maquinaria",100);
	    conf1.add(col1);
	    col1  = new ColumnConfig("codigocolorcodigo","Codigo Color",100);
	    conf1.add(col1);
	    col1  = new ColumnConfig("numerorollo","Nro Rollo",100);
	    conf1.add(col1);
	    col1  = new ColumnConfig("empleado","Empleado",100);
	    conf1.add(col1);
	    col1  = new ColumnConfig("artdescripcion","Articulo",100);
	    conf1.add(col1);
	    col1  = new ColumnConfig("loteproveedor","Lote Proveedor",100);
	    conf1.add(col1);
	    col1  = new ColumnConfig("agujasrotas","Agujas Rotas",100);
	    conf1.add(col1);
	    col1  = new ColumnConfig("metroshilo","Metros Hilo",100);
	    conf1.add(col1);
	    col1  = new ColumnConfig("fecha","Fecha",100);
	    conf1.add(col1);
	    col1  = new ColumnConfig("cantidad","Cantidad",100);
	    conf1.add(col1);
	   	    
	    final ColumnModel cm1 = new ColumnModel(conf1);
	    grid1 = new Grid<ModelData>(DetalleNotaIngresos.store, cm1);  
        grid1.addListener(Events.Attach, new Listener<GridEvent<BeanModel>>() {  
          public void handleEvent(GridEvent<BeanModel> be) {  
        	  DetalleNotaIngresos.loader.load(0, 10);  
          }  
        }); 
        sm1.setSelectionMode(SelectionMode.SINGLE);
        grid1.setSelectionModel(sm1);
        grid1.getSelectionModel().addListener(Events.SelectionChange,
           new Listener<SelectionChangedEvent<ModelData>>() {
			@Override
			public void handleEvent(SelectionChangedEvent<ModelData> be) {		
			   if(be.getSelection().size()==0){
				   clearForm1();
                   formbinding1.unbind();
				   btnDeleteDetalleNotaIngreso.setEnabled(false);
				   //DetalleNotaIngresos.store.removeAll();
				   
				 }
			   if(be.getSelection().size()==1){
				   formbinding1.bind((ModelData) be.getSelection().get(0));
	  	          // selectedModel1 = be.getSelectedItem();
	  	            
				   btnDeleteDetalleNotaIngreso.setEnabled(true);
				   selectedModel1 = be.getSelectedItem();
		           DetalleNotaIngresos.detallenotaingreso_id = selectedModel1.get("id");
		           System.out.println("detallenotaingreso_id"+DetalleNotaIngresos.detallenotaingreso_id);
		          }
    		   if(be.getSelection().size()>1)
    			   btnDeleteDetalleNotaIngreso.setEnabled(false);
    			   formbinding1.unbind();
			}
          });
        
        grid1.setLoadMask(true);  
        grid1.setBorders(true);       
        GridFilters filt      = new GridFilters();
        StringFilter maq      = new StringFilter("maqdescripcion");
        StringFilter codcol   = new StringFilter("codigocolorcodigo");
        StringFilter numroll  = new StringFilter("numerorollo");
        StringFilter empl     = new StringFilter("empleado");
        StringFilter art      = new StringFilter("artdescripcion");
        StringFilter lteprov  = new StringFilter("loteproveedor");
        StringFilter aguj     = new StringFilter("agujasrotas");
        StringFilter mhil     = new StringFilter("metroshilo");
        StringFilter fech     = new StringFilter("fecha");        
        StringFilter cant     = new StringFilter("cantidad");
          
        filt.addFilter(maq);        
        filt.addFilter(codcol);        
        filt.addFilter(numroll);        
        filt.addFilter(empl);        
        filt.addFilter(art);        
        filt.addFilter(lteprov);        
        filt.addFilter(aguj);        
        filt.addFilter(mhil);        
        filt.addFilter(fech);        
        filt.addFilter(cant);

        grid1.addPlugin(filt);                
        grid1.addPlugin(sm1);
        formbinding1 = new FormBinding(f);
        formbinding1.setStore(DetalleNotaIngresos.store);
        formbinding1.addFieldBinding(new FieldBinding(idf,"id"));
        formbinding1.addFieldBinding(new FieldBinding(maquinariaf,"maqdescripcion"));
        formbinding1.addFieldBinding(new FieldBinding(codigocolorf,"codigocolorcodigo"));
        formbinding1.addFieldBinding(new FieldBinding(numerorollof,"numerorollo"));
        formbinding1.addFieldBinding(new FieldBinding(empleadof,"empleado"));
        formbinding1.addFieldBinding(new ComboboxFieldBinding(articulof,"artdescripcion"));
        formbinding1.addFieldBinding(new FieldBinding(loteproveedorf,"loteproveedor"));
	    formbinding1.addFieldBinding(new FieldBinding(agujasrotasf,"agujasrotas"));
	    formbinding1.addFieldBinding(new FieldBinding(metroshilof,"metroshilo"));
	    formbinding1.addFieldBinding(new FieldBinding(cantidadf,"cantidad"));
	    formbinding1.addFieldBinding(new FieldBinding(fechaf,"fecha"));
     	   
		cpg.setTopComponent(toolbar1());
		cpg.add(grid1,cg);
	    cpg.setBottomComponent(toolBarPag1);
	
		ctp.add(cpg,cen);
		cpe.add(cpf,cen);
		
        add(ctp,center);
	    add(cpe,east);
	    
	}
   
     public ToolBar toolbar1(){
		toolBar1 = new ToolBar();
		btnDeleteDetalleNotaIngreso = new Button("Eliminar",IconHelper.createPath("images/icons/delete.gif"));
		btnDeleteDetalleNotaIngreso.setEnabled(false);
		toolBar1.add(btnDeleteDetalleNotaIngreso);
		btnDeleteDetalleNotaIngreso.addSelectionListener(new SelectionListener<ButtonEvent>(){
		  public void componentSelected(ButtonEvent ce){
			    Listener<MessageBoxEvent> callback = new Listener<MessageBoxEvent>() {	 
				  public void handleEvent(MessageBoxEvent be) {
		           if (be.getButtonClicked().getItemId().equals(Dialog.YES)) { 
				        DetalleNotaIngresos.eliminar(DetalleNotaIngresos.detallenotaingreso_id);
					    DetalleNotaIngresos.loader.load();
			         }
		           }
			     };
			     String msg = "Esta seguro que desea eliminar esta direccion del Cliente?";
			     MessageBox.confirm("Eliminar Direccion Cliente?", msg, callback);
			 }
		   });
	   return toolBar1;
	 }
	
	public ButtonBar buttonForm(){
	  ButtonBar bb = new ButtonBar();
	  btnGuardar = new Button("Guardar",IconHelper.createPath("images/icons/save_all.png"));		  
	  btnGuardar.addSelectionListener(new SelectionListener<ButtonEvent>(){
		public void componentSelected(ButtonEvent ve){
			
	     if(validarForm1()&&validarIdsForm1()){//validarForm()&& validarIdsForm()){  
	       final NotaIngreso ni = new NotaIngreso();
	         ni.setTipodocumento_id(idtipdocumento);
	         ni.setMotivo_id(idmotivo);
	         ni.setValesalida_id(null);
	         ni.setEstadonotaingreso_id(idestadonotaingreso);
	         ni.setDetallepedido_id(DetallePedidos.detallepedido_id);
	         ni.setNumerodocumento(numDocumento.getValue());
		 if(id.getValue() == null){	
		    NotaIngresos.guardar(ni);
	        NotaIngresos.loader.load();

	      }
	     if(id.getValue() != null){
		 Listener<MessageBoxEvent> callback = new Listener<MessageBoxEvent>() {	 
		  public void handleEvent(MessageBoxEvent be) {
		    if(be.getButtonClicked().getItemId().equals(Dialog.YES)) {  
		       ni.setId(Integer.parseInt(id.getValue()));
		       NotaIngresos.actualizar(ni);
		       NotaIngresos.loader.load();
			  }
			}
	      };
	      String msg = "Esta seguro que desea Actualizar la Nota de Ingreso?";
	      MessageBox.confirm("Actualizar Nota de Ingreso?", msg, callback);
	 	  }
        }
	   }
      });
	  HorizontalAlignment align =  HorizontalAlignment.CENTER;
	  bb.add(btnGuardar);
	  bb.setAlignment(align);
	  return bb;
	  }
   
   public void clearForm1(){
	   f.clear();
   }
   
   public boolean validarForm1(){
	   return f.isValid();
   }
  
   public boolean validarIdsForm1(){
	boolean var = false; 
	Integer idni=null;//,idartf=null;
	idni = Integer.parseInt(id.getValue().toString());
	
	System.out.println("el id del articulo es"+idartf);
	System.out.println("el id de la nota de ingreso es"+idni);
	
	if(idartf!=null && idni!=null)
	       var=true;
	return var;
   }
   
   public ButtonBar buttonForm1(){
    ButtonBar bb = new ButtonBar();
    btnGuardar = new Button("Guardar",IconHelper.createPath("images/icons/save_all.png"));		  
    btnGuardar.addSelectionListener(new SelectionListener<ButtonEvent>(){
	public void componentSelected(ButtonEvent ve){
     if(validarForm1()&&validarIdsForm1()){  
	   final DetalleNotaIngreso dni = new DetalleNotaIngreso();
	   dni.setNotaingreso_id(Integer.parseInt(id.getValue()));
	  /* dni.setMaquinaria_id(null);
	   dni.setCodigocolor_id(null);
	   dni.setEmpleado_id(null);
	   dni.setNumerorollo(null);*/
	   dni.setFecha(fechaf.getValue());
	   dni.setArticulo_id(Integer.parseInt(articulof.getValue().get("id").toString()));
	   dni.setLoteproveedor(loteproveedorf.getValue());
	   /*dni.setAgujasrotas(null);
	   dni.setMetroshilo(null);*/
	   dni.setCantidad(Double.parseDouble(cantidadf.getValue().toString()));
  
	 if(idf.getValue() == null){	
	   System.out.println("entro en guardar detallenotaingreso");
       DetalleNotaIngresos.guardar(dni);
       DetalleNotaIngresos.loader.load();
       clearForm1();
     }
     if(idf.getValue() != null){
	  Listener<MessageBoxEvent> callback = new Listener<MessageBoxEvent>() {	 
	  public void handleEvent(MessageBoxEvent be) {
	    if(be.getButtonClicked().getItemId().equals(Dialog.YES)) {  
	       dni.setId(Integer.parseInt(idf.getValue()));
	       DetalleNotaIngresos.actualizar(dni);
		   DetalleNotaIngresos.loader.load();
		  }
		}
      };
      String msg = "Esta seguro que desea Actualizar el Detalle Nota Ingreso?";
      MessageBox.confirm("Actualizar Detalle Nota Ingreso?", msg, callback);
 	    }
       }
      }
     });

     HorizontalAlignment align =  HorizontalAlignment.CENTER;
     bb.add(btnGuardar);
     bb.setAlignment(align);
    return bb;
  }
   
    public void Form(){
      f = new FormPanel();
	  f.setHeaderVisible(false);
	  f.setFrame(true);
	  idf = new HiddenField<String>();
	  idf.setVisible(false);
	  Maquinarias.loader.load();
	  maquinariaf = new ComboBox<ModelData>();  
	  maquinariaf.setEmptyText("Select a state...");  
	  maquinariaf.setAllowBlank(true);
      maquinariaf.setDisplayField("descripcion");  
	  maquinariaf.setFieldLabel(x.maquinaria());
	  maquinariaf.setWidth(150);  
	  maquinariaf.setStore(Maquinarias.store);
	  maquinariaf.setValueField("descripcion");
	  maquinariaf.setTypeAhead(true);  
	  maquinariaf.setTriggerAction(TriggerAction.ALL); 
	  maquinariaf.addSelectionChangedListener(new SelectionChangedListener<ModelData>(){
	  public void selectionChanged(SelectionChangedEvent<ModelData> se) {
   	   if(maquinariaf.getValue()!=null){ 
   		  idmaquinaria = Integer.parseInt(maquinariaf.getValue().get("id").toString());
			 }
  	      }
	   });	
	  Empleados.loader.load();
	  empleadof = new ComboBox<BeanModel>();  
	  empleadof.setEmptyText("Select a state...");  
	  empleadof.setAllowBlank(true);
      empleadof.setDisplayField("empleado");  
	  empleadof.setFieldLabel(x.empleado());
	  empleadof.setWidth(150);  
	  empleadof.setStore(Empleados.store);
	  empleadof.setValueField("empleado");
	  empleadof.setTypeAhead(true);  
	  empleadof.setTriggerAction(TriggerAction.ALL); 
	  empleadof.addSelectionChangedListener(new SelectionChangedListener<BeanModel>(){
	  public void selectionChanged(SelectionChangedEvent<BeanModel> se) {
   	   if(empleadof.getValue()!=null){ 
   		  idempleado = Integer.parseInt(empleadof.getValue().get("id").toString());
			 }
  	      }
	   });	
	
	  CodigoColores.loader.load();
	  codigocolorf = new ComboBox<ModelData>();  
	  codigocolorf.setEmptyText("Select a state..."); 
	  codigocolorf.setAllowBlank(true);
      codigocolorf.setDisplayField("descripcion");  
	  codigocolorf.setFieldLabel(x.codigocolor());
	  codigocolorf.setWidth(150);  
	  codigocolorf.setStore(CodigoColores.store);
	  codigocolorf.setValueField("descripcion");
	  codigocolorf.setTypeAhead(true);  
	  codigocolorf.setTriggerAction(TriggerAction.ALL); 
	  codigocolorf.addSelectionChangedListener(new SelectionChangedListener<ModelData>(){
	  public void selectionChanged(SelectionChangedEvent<ModelData> se) {
   	   if(codigocolorf.getValue()!=null){ 
   		  idcodigocolor = Integer.parseInt(codigocolorf.getValue().get("id").toString());
			 }
  	      }
	   });	
	  
	  numerorollof = new NumberField();
      numerorollof.setFieldLabel(x.numerorollo());
      
	  fechaf = new DateField();
	  fechaf.setName("fecha");
	  fechaf.getPropertyEditor().setFormat(DateTimeFormat.getFormat("dd/MM/yyyy"));
	  fechaf.setAllowBlank(false);
	  fechaf.setFieldLabel(x.fecha());
	  fechaf.setValue(new Date());
	  articulof = new ComboBox<ModelData>();
	  articulof.setEmptyText("Select a state...");  
	  articulof.setAllowBlank(false);
	  articulof.setDisplayField("descripcion");  
	  articulof.setFieldLabel(x.articulos());
	  articulof.setWidth(150);  
	  articulof.setStore(Articulos.storeCombo);
	  articulof.setValueField("descripcion");
	  articulof.setTypeAhead(true);  
	  articulof.setTriggerAction(TriggerAction.ALL); 
	  articulof.addSelectionChangedListener(new SelectionChangedListener<ModelData>(){
	    public void selectionChanged(SelectionChangedEvent<ModelData> se) {
	     if(articulof.getValue()!=null){	
 		  idartf  = Integer.parseInt(articulof.getValue().get("id").toString());
 		  }
         }
	  });	

      loteproveedorf = new TextField<String>();
	  loteproveedorf.setFieldLabel(x.loteproveedor());
	  
	  agujasrotasf = new NumberField();
      agujasrotasf.setFieldLabel(x.agujasrotas());

      metroshilof = new NumberField();
      metroshilof.setFieldLabel(x.metroshilo());
	  
      cantidadf = new NumberField();
      cantidadf.setFieldLabel(x.cantidad());

      f.add(idf);
      f.add(fechaf);
      f.add(codigocolorf);
      f.add(empleadof);
      f.add(maquinariaf);
      f.add(numerorollof);
      f.add(articulof,new FormData("-20"));
      f.add(loteproveedorf,new FormData("-20"));
      f.add(agujasrotasf,new FormData("-20"));
      f.add(metroshilof,new FormData("-20"));
	  f.add(cantidadf,new FormData("-20"));
	  f.add(buttonForm1(),new FormData("-20"));
   }
      
}